/**
 * Cookie 持久化测试
 * 验证 Puppeteer 在多次请求间是否保持同一个 Cookie
 */

const puppeteer = require('puppeteer');

async function testCookiePersistence() {
  console.log('🧪 开始测试 Cookie 持久化...\n');

  const browser = await puppeteer.launch({
    headless: true,
    args: ['--no-sandbox']
  });

  const page = await browser.newPage();

  // 访问一个会设置 Cookie 的网站
  await page.goto('http://localhost:3001', {
    waitUntil: 'networkidle0',
    timeout: 30000
  });

  console.log('✅ 页面加载完成\n');

  // 测试1: 第一次请求
  console.log('📍 测试1: 第一次请求');
  const cookies1 = await page.cookies();
  console.log(`Cookie 数量: ${cookies1.length}`);
  console.log('Cookies:', cookies1.map(c => `${c.name}=${c.value.substring(0, 20)}...`).join(', '));
  console.log('');

  // 模拟调用 getLiveInfo
  await page.evaluate(async () => {
    if (typeof window.getLiveInfo === 'function') {
      try {
        // 这会触发 fetch('/dylive/...')，可能会设置新 Cookie
        await window.getLiveInfo('7412345678901234567');
      } catch (err) {
        console.log('getLiveInfo 调用失败（预期，因为房间可能不存在）');
      }
    }
  });

  // 等待一下让 Cookie 设置生效
  await new Promise(resolve => setTimeout(resolve, 2000));

  // 测试2: 第二次请求（检查 Cookie 是否保留）
  console.log('📍 测试2: 第二次请求（2秒后）');
  const cookies2 = await page.cookies();
  console.log(`Cookie 数量: ${cookies2.length}`);
  console.log('Cookies:', cookies2.map(c => `${c.name}=${c.value.substring(0, 20)}...`).join(', '));
  console.log('');

  // 测试3: 第三次请求（检查 Cookie 一致性）
  console.log('📍 测试3: 第三次请求（再次调用）');
  await page.evaluate(async () => {
    if (typeof window.getLiveInfo === 'function') {
      try {
        await window.getLiveInfo('7412345678901234568');
      } catch (err) {
        console.log('getLiveInfo 调用失败');
      }
    }
  });

  await new Promise(resolve => setTimeout(resolve, 1000));

  const cookies3 = await page.cookies();
  console.log(`Cookie 数量: ${cookies3.length}`);
  console.log('Cookies:', cookies3.map(c => `${c.name}=${c.value.substring(0, 20)}...`).join(', '));
  console.log('');

  // 对比分析
  console.log('📊 分析结果:');

  // 检查 Cookie 是否一致
  const cookie1Names = new Set(cookies1.map(c => c.name));
  const cookie2Names = new Set(cookies2.map(c => c.name));
  const cookie3Names = new Set(cookies3.map(c => c.name));

  console.log(`第1次请求的 Cookie: ${Array.from(cookie1Names).join(', ')}`);
  console.log(`第2次请求的 Cookie: ${Array.from(cookie2Names).join(', ')}`);
  console.log(`第3次请求的 Cookie: ${Array.from(cookie3Names).join(', ')}`);
  console.log('');

  // 检查特定 Cookie 的值是否保持一致
  const checkCookie = '__ac_nonce';
  const value1 = cookies1.find(c => c.name === checkCookie)?.value;
  const value2 = cookies2.find(c => c.name === checkCookie)?.value;
  const value3 = cookies3.find(c => c.name === checkCookie)?.value;

  console.log('🔑 关键 Cookie (__ac_nonce) 一致性检查:');
  console.log(`第1次: ${value1 || '不存在'}`);
  console.log(`第2次: ${value2 || '不存在'}`);
  console.log(`第3次: ${value3 || '不存在'}`);

  if (value1 && value2 && value3 && value1 === value2 && value2 === value3) {
    console.log('✅ Cookie 值完全一致，证明使用的是同一个 Cookie！');
  } else if (value2 && value3 && value2 === value3) {
    console.log('✅ 第2次和第3次 Cookie 一致，持久化成功！');
    console.log('💡 第1次可能是初始请求，还没有设置 Cookie');
  } else {
    console.log('❌ Cookie 值不一致，可能每次都重新获取');
  }

  await browser.close();
  console.log('\n🧪 测试完成');
}

// 运行测试
testCookiePersistence().catch(console.error);
